package com.ruoyi.system.mapper;

import java.util.List;
import java.util.Map;

import com.ruoyi.system.domain.VideoData;
import org.apache.ibatis.annotations.Param;

/**
 * 数据管理Mapper接口
 * 
 * @author wsx
 * @date 2025-07-30
 */
public interface VideoDataMapper 
{
    /**
     * 查询数据管理
     * 
     * @param dataId 数据管理主键
     * @return 数据管理
     */
    public VideoData selectVideoDataByDataId(Long dataId);

    /**
     * 查询数据管理列表
     * 
     * @param videoData 数据管理
     * @return 数据管理集合
     */
    public List<VideoData> selectVideoDataList(VideoData videoData);

    /**
     * 根据ID查询数据管理列表
     * 
     * @param ids 数据管理主键
     * @return 数据管理集合
     */
    public List<VideoData> selectVideoDataListByIds(VideoData videoData);

    /**
     * 新增数据管理
     * 
     * @param videoData 数据管理
     * @return 结果
     */
    public int insertVideoData(VideoData videoData);

    /**
     * 修改数据管理
     * 
     * @param videoData 数据管理
     * @return 结果
     */
    public int updateVideoData(VideoData videoData);

    /**
     * 删除数据管理
     * 
     * @param dataId 数据管理主键
     * @return 结果
     */
    public int deleteVideoDataByDataId(Long dataId);

    /**
     * 批量删除数据管理
     * 
     * @param dataIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteVideoDataByDataIds(String[] dataIds);


    void insertTelemetryData(Map<String, Object> map);

    void updateStatusZeroTo1(Long dataId);

    void deleteStatusZeroData();

    void deleteTelemetryDataById(Long id);

    void updateTelemetryStoragePath(@Param("telemetryStoragePath")String telemetryStoragePath,@Param("dataId")Long dataId);

    /**
     * 分页查询遥测数据（返回 List<Map<String, Object>>）
     * @param taskId 任务类型ID（可选，null 不筛选）
     * @param telemetryId 遥测任务类型ID（可选，null 不筛选）
     * @param name 名称（可选，模糊搜索，null/空不筛选）
     * @param offset 分页偏移量（(page-1)*limit）
     * @param limit 每页条数
     * @return 分页数据列表，每个元素是 Map（key=表字段名，value=字段值）
     */
    List<Map<String, Object>> getTelemetryDataPageList(
            @Param("taskId") Integer taskId,
            @Param("telemetryId") Integer telemetryId,
            @Param("dataId") Integer dataId,
            @Param("name") String name,
            @Param("offset") Integer offset,
            @Param("limit") Integer limit
    );


    int batchInsertTelemetryData(List<Map<String, Object>> list);

    /**
     * 统计符合条件的总条数（返回 Long 类型）
     * @param taskId 任务类型ID（可选）
     * @param telemetryId 遥测任务类型ID（可选）
     * @param name 名称（可选）
     * @return 总条数（Long 类型，避免数据量大时溢出）
     */
    Long getTelemetryDataTotalCount(
            @Param("taskId") Integer taskId,
            @Param("telemetryId") Integer telemetryId,
            @Param("dataId") Integer dataId,
            @Param("name") String name
    );


    /**
     * 分页查询结果快报模板列表
     * @param page 页码（从0开始）
     * @param limit 每页记录数
     * @param keyword 关键词（搜索模板名称）
     * @return 模板列表（Map格式）
     */
    List<Map<String, Object>> selectResultTemplateList(
            @Param("page") Integer page,
            @Param("limit") Integer limit,
            @Param("keyword") String keyword
    );

    /**
     * 查询结果快报模板总记录数
     * @param keyword 关键词（搜索模板名称）
     * @return 总记录数
     */
    Integer selectResultTemplateCount(@Param("keyword") String keyword);


    // 新增
    int insertResultTemplate(Map<String, Object> template);

    // 修改
    int updateResultTemplate(Map<String, Object> template);

    // 删除
    int deleteResultTemplateById(Integer id);

    int deleteResultTemplateByIds(@Param("ids") List<Integer> ids);

    // 根据ID查询
    Map<String, Object> selectResultTemplateById(Integer id);

}
